package com.ln.lnzw.net;

import com.ln.lnzw.bean.AddCollectBean;
import com.ln.lnzw.bean.BanjianCountNetBean;
import com.ln.lnzw.bean.Bean;
import com.ln.lnzw.bean.CenterDetailBean;
import com.ln.lnzw.bean.CommonProblemBean;
import com.ln.lnzw.bean.ComplainBean;
import com.ln.lnzw.bean.ConsultationCeplydetailBean;
import com.ln.lnzw.bean.ConsultationReplyBean;
import com.ln.lnzw.bean.EnaluationBean;
import com.ln.lnzw.bean.HeadBean;
import com.ln.lnzw.bean.HotItemsBean;
import com.ln.lnzw.bean.ImplementationSubjectBean;
import com.ln.lnzw.bean.InquiriesBean;
import com.ln.lnzw.bean.IsCollectBean;
import com.ln.lnzw.bean.LoginBean;
import com.ln.lnzw.bean.MaterialDirBean;
import com.ln.lnzw.bean.MineCollectionNetbean;
import com.ln.lnzw.bean.MyConsultationBean;
import com.ln.lnzw.bean.ServiceObjectBean;
import com.ln.lnzw.bean.PublicityBean;
import com.ln.lnzw.bean.RegistBean;
import com.ln.lnzw.bean.ServerSubscribeRecomNetBean;
import com.ln.lnzw.bean.ServiceCategoryBean;
import com.ln.lnzw.bean.ServiceSubscribeServiceNetBean;
import com.ln.lnzw.bean.ServiceTopRecomNetBean;
import com.ln.lnzw.bean.SettingsPersonalBean;
import com.ln.lnzw.bean.StatisticsBean;
import com.ln.lnzw.bean.SuggestBean;
import com.ln.lnzw.bean.UniversalBean;
import com.ln.lnzw.bean.UserDetailNewBean;
import com.ln.lnzw.bean.UserPicBean;
import com.ln.lnzw.bean.UserSuggestionBean;
import com.ln.lnzw.bean.WcmBean;
import com.ln.lnzw.bean.WorkDetailsBean;

import java.util.Map;

import io.reactivex.Observable;
import okhttp3.RequestBody;
import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.Header;
import retrofit2.http.Headers;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.PartMap;
import retrofit2.http.Query;
import retrofit2.http.Url;

/**
 * Created by wuwei on 2018/1/3.
 * description :所有的请求方法   可自动解析封装 可解析成字符串
 */
public interface RequestInfonApi {

    //用户注册 法人和自然人
    @POST("app/login/register")
    Observable<RegistBean> regist(@Header("token") String token,
                                 @Query("userName") String phone,
                                  @Query("password") String psd,
                                  @Query("regWay") String regWay,
                                  @Query("regType") String regType,
                                  @Query("email") String email
    );
    //用户注册 自然人
    @POST("app/register/citizen")
    Observable<RegistBean> naturalPersonRegist(@Header("token") String token,
                                 @Query("userName") String userName,
                                  @Query("password") String psd,
                                  @Query("trueName") String trueName,
                                  @Query("creditID") String creditID,
                                  @Query("mobile") String mobile,
                                  @Query("email") String email,
                                  @Query("msgCode") String msgCode

    );
//    //用户注册 法人
//    @POST("app/register/enterprise")
//    Observable<RegistBean> legalPersonRegist(@Header("token") String token,
//                                  @Query("file") String file,
//                                  @Query("enterpriseType") String enterpriseType,
//                                  @Query("enterpriseName") String enterpriseName,
//                                  @Query("businessLicense") String businessLicense,
//                                  @Query("registeredAuthority") String registeredAuthority,
//                                  @Query("legalPerson") String legalPerson,
//                                  @Query("legalPersonCertificateType") String legalPersonCertificateType,
//                                  @Query("legalPersonID") String legalPersonID,
//                                  @Query("loginAccountName") String loginAccountName,
//                                  @Query("personNewPassword") String personNewPassword,
//                                  @Query("trueName") String trueName,
//                                  @Query("personCreditID") String personCreditID,
//                                  @Query("email") String email,
//                                  @Query("mobile") String mobile,
//                                  @Query("mobileCheckCode") String mobileCheckCode
//    );
    //用户注册 法人
    @POST("app/register/enterprise")
    Observable<RegistBean> legalPersonRegist(@Body RequestBody Body);


    //登录    自然人
    @POST("app/auth/doCLogin")
//    @Headers("content-type:text/html;charset=UTF-8")
    Observable<LoginBean> getNaturalPersonLogin(/*@Header("Content-type") String lang,*/
                                 @Header("token") String token,
                                @Query("loginKey") String loginKey,
                                @Query("password") String password,
                                @Query("verifycode") String verifycode
    );
    //登录    法人
    @POST("app/auth/doELogin")
//    @Headers("content-type:text/html;charset=UTF-8")
    Observable<LoginBean> getLegalPersonLogin(/*@Header("Content-type") String lang,*/
                                 @Header("token") String token,
                                @Query("loginKey") String loginKey,
                                @Query("password") String password,
                                @Query("verifycode") String verifycode
    );
    //修改密码
    @POST("app/user/updatePassword")
    Observable<SettingsPersonalBean> changePassword(@Header("token") String token,
                                @Query("attrValue") String attrValue,
                                @Query("oldPassword") String oldPassword,
                                @Query("newPassword") String newPassword,
                                @Query("ensurePassword") String ensurePassword
    );
//    获取办事服务树形列表-实施主体
    @POST("app/matter/findByIdorgAndroid")
    Observable<Bean> get(/*@Header("token") String token,*/
                           @Query("pageNum") String pageNum,
                         @Query("pageSize") String pageSize,
                         @Query("qlObject") String qlObject,
                         @Query("idorg") String idorg
    );
//    获取办事服务树形列表 -职权类型
    @POST("app/matter/findByQlKindAndroid")
    Observable<Bean> getKind(/*@Header("token") String token,*/
                           @Query("pageNum") String pageNum,
                         @Query("pageSize") String pageSize,
                         @Query("qlObject") String qlObject,
                         @Query("qlKind") String qlKind
    );
//    获取办事服务树形列表 -服务对象 自然人
    @POST("app/matter/findByRightclassGerenztAndroid")
    Observable<Bean> getNatural(/*@Header("token") String token,*/
                           @Query("pageNum") String pageNum,
                         @Query("pageSize") String pageSize,
                         @Query("qlObject") String qlObject,
                         @Query("rightclassGerenzt") String rightclassGerenzt
    );
    //自然人和法人
    @GET
    Observable<ServiceObjectBean> getNewNaturalAndLegal(@Url  String url);
    //是否收藏
    @POST("app/collect/isExist")
    Observable<IsCollectBean> isCollect( @Header("token") String token,
            @Query("userId") String userId,
                                        @Query("itemCode") String itemCode
    );
    //添加收藏
    @POST("app/collect/insert")
    Observable<AddCollectBean> addCollect(@Header("token") String token,
                                          @Query("userId") String userId,
                                          @Query("itemCode") String itemCode,
                                          @Query("itemTitle") String itemTitle
//                                        @Query("itemUuid") String itemUuid
    );
    //取消收藏
    @POST("app/collect/cancel")
    Observable<IsCollectBean> cancelCollect(@Header("token") String token,
            @Query("userId") String userId,
                                        @Query("itemCode") String itemCode

    );

//    获取办事服务树形列表 -服务对象 法人
    @POST("app/matter/findByRightclassQiYeztAndroid")
    Observable<Bean> getLegal(/*@Header("token") String token,*/
                           @Query("pageNum") String pageNum,
                         @Query("pageSize") String pageSize,
                         @Query("qlObject") String qlObject,
                         @Query("rightclassQiyezt") String rightclassQiyezt
    );
    //办件统计
    @POST/*("app/public/officeStatistics")*/
    Observable<StatisticsBean> getStatistics(@Url String url);
    //热门事项
    @POST/*("app/public/officeStatistics")*/
    Observable<HotItemsBean> getHotItems(@Url String url);

    //用户建议
    @POST("app/propose/insert")
    Observable<UserSuggestionBean> getUserSuggestion(@Query("userId") String userId,
                                                         @Query("applyUsername") String applyUsername,
                                                         @Query("applyIdcard") String applyIdcard,
                                                         @Query("applyTelephone") String applyTelephone,
                                                         @Query("applyEmail") String applyEmail,
                                                         @Query("applyAdress") String applyAdress,
                                                         @Query("applyTitle") String applyTitle,
                                                         @Query("applyContent") String applyContent
                                                         );
    //用户投诉
    @POST("app/complaint/insert")
    Observable<UserSuggestionBean> getUserComplaints(@Query("userId") String userId,
                                                         @Query("applyUsername") String applyUsername,
                                                         @Query("applyIdcard") String applyIdcard,
                                                         @Query("applyTelephone") String applyTelephone,
                                                         @Query("applyEmail") String applyEmail,
                                                         @Query("applyAdress") String applyAdress,
                                                         @Query("applyDepartmentId") String applyDepartmentId,
                                                         @Query("applyDepartmentName") String applyDepartmentName,
                                                         @Query("applyTitle") String applyTitle,
                                                         @Query("applyContent") String applyContent,
                                                         @Query("applyType") String applyType,
                                                         @Query("applyRunnumber") String applyRunnumber
                                                         );
    //用户咨询
    @POST("app/consultant/insert")
    Observable<UserSuggestionBean> getUserConsultation(@Query("userId") String userId,
                                                         @Query("applyUsername") String applyUsername,
                                                         @Query("applyIdcard") String applyIdcard,
                                                         @Query("applyTelephone") String applyTelephone,
                                                         @Query("applyEmail") String applyEmail,
                                                         @Query("applyAdress") String applyAdress,
                                                         @Query("applyDepartmentId") String applyDepartmentId,
                                                         @Query("applyDepartmentName") String applyDepartmentName,
                                                         @Query("itemCode") String itemCode,
                                                         @Query("applyProcessName") String applyProcessName,
                                                         @Query("applyTitle") String applyTitle,
                                                         @Query("applyContent") String applyContent
                                                         );
    //咨询回复
    @POST("app/consultant/allList")
    Observable<ConsultationReplyBean> getConsultationCeplyList(@Query("page") String page,
                                                               @Query("limit") String limit
                                                         );
    //咨询回复详情
    @POST("app/consultant/detail")
    Observable<ConsultationCeplydetailBean> getConsultationCeplydetail(@Query("id") String id
                                                         );




    //获取办事服务详情
    @POST("app/matter/getContent")
    Observable<WorkDetailsBean> getWorkDetails(/*@Header("token") String token,*/
                         @Query("id") String id
    );


//    我的评价列表
    @Headers({"version:1.0.0","apicode:EG1002"})
    @POST("app/appraise/pageList")
    Observable<EnaluationBean> getEvaluation(@Header("token") String token,
                                             @Query("userId") String userName,
                                             @Query("page") int page,
                                             @Query("limit") int limit
    );

    /**
     *--------------------------------------下边是便民服务---------------------------------------------------------------------------------
     */
    //获取便民服务中服务分类列表
    @Headers({"apicode:AB1003", "version:1.0.0"})
    @GET("app/bmfw/category")
    Observable<ServiceCategoryBean> getServiceCategory();
    //获取便民服务中首页推荐列表的方法,用户登录传id,未登录不传
    @Headers({"apicode:AB1003", "version:1.0.0"})
    @POST("app/bmfw/topRecomList")
    Observable<ServiceTopRecomNetBean> getTopRecomList();
    //获取便民服务首页订阅服务列表的方法,参数用户id
    @Headers({"apicode:AB1003", "version:1.0.0"})
    @POST("app/bmfw/subList")
    Observable<ServiceSubscribeServiceNetBean> getServiceSubscribeList(@Query("userId")String userId);
    //获取便民服务
    @Headers({"apicode:AB1003", "version:1.0.0"})
    @POST("app/bmfw/subRecomList")
    Observable<ServerSubscribeRecomNetBean> getServiceSubscribeRecomList(@Query("userId")String userId);
    //添加订阅
    @Headers({"apicode:AB1003", "version:1.0.0"})
    @POST("app/bmfw/subInsert")
    Observable<UniversalBean> addSub(@Query("userId")String userId,
                                     @Query("appUuid")String appUuid);
    //取消订阅
    @Headers({"apicode:AB1003", "version:1.0.0"})
    @POST("app/bmfw/subCancel")
    Observable<UniversalBean> cancleSub(@Query("userId")String userId,
                                     @Query("appUuid")String appUuid);
    //获取便民服务二级列表
    @Headers({"apicode:AB1003", "version:1.0.0"})
    @POST("app/bmfw/cateSers")
    Observable<ServerSubscribeRecomNetBean> getServiceCateSers(@Query("userId")String userId,
                                                               @Query("serverKey")String serverKey);
    /**
     * -----------------------------------------------下边是个人中心非登录注册的部分接口----------------------------------------------------
     */
    //获取我的收藏的列表
    @Headers({"apicode:EK1003", "version:1.0.0"})
    @POST("app/collect/pageList")
    Observable<MineCollectionNetbean> getMineCollectionList(@Query("userId")String userId,
                                                            @Query("page")int page,
                                                            @Query("limit")int limit,
                                                            @Header("token")String token);

    //更新用户信息
    @POST("app/user/updateUser")
    Observable<SettingsPersonalBean> getSettingCenter(@Query("userName")String userName,
                                                      @Query("trueName")String trueName,
                                                      @Query("address")String address,
                                                      @Query("email")String email,
                                                      @Query("nickName")String nickName,
                                                      @Query("mobile")String mobile,
                                                      @Query("creditID")String creditID,
                                                      @Query("province")String province,
                                                      @Query("city")String city,
                                                      @Query("country")String county);

    @POST("app/userhead/updateHeadUrl")
    Observable<HeadBean> upDateHead(@Body RequestBody Body
                                   );
    @Headers({"apicode:AA1001","version:1.0.0"})
    @POST("app/user/queryUserDetail")
    Observable<UserDetailNewBean> getUserDetail(@Header("token")String token,
                                                @Query("loginAccountName")String LoginAccountName,
                                                @Query("password")String password
                                   );
    @POST("app/user/detail")
    Observable<CenterDetailBean> getCenterDetail(@Query("loginUuid") String loginUuid);



    //获取我的材料库列表的接口
    @Headers({ "version:1.0.0"})
    @POST("app/material/dirList")
    Observable<MaterialDirBean> getMaterialDirList(@Query("userId")String userId,
                                                      @Query("page")int page,
                                                      @Query("limit")int limit,
                                                      @Header("token")String token);
    //新建文件夹
    @Headers({ "version:1.0.0"})
    @POST("app/material/dirMake")
    Observable<UniversalBean> makeDir(@Query("userId")String userId,
                                      @Query("dirName")String dirName,
                                      @Header("token")String token);
    //文件夹重命名
    @Headers({ "version:1.0.0"})
    @POST("app/material/dirRename")
    Observable<UniversalBean> renameDir(@Query("userId")String userId,
                                      @Query("dirName")String dirName,
                                      @Query("dirUuid")String dirUuid,
                                      @Header("token")String token);
    //删除文件夹
    @Headers({ "version:1.0.0"})
    @POST("app/material/dirDelete")
    Observable<UniversalBean> deleteDir(@Query("userId")String userId,
                                      @Query("dirUuid")String dirUuid,
                                      @Header("token")String token);
    //    我的建议列表
    @Headers({"version:1.0.0","apicode:EI1001"})
    @POST("app/propose/userList")
    Observable<SuggestBean> getSuggest(@Header("token") String token,
                                       @Query("userId") String userId,
                                       @Query("page") int page,
                                       @Query("limit") int limit,
                                       @Query("creditID") String creditID
    );
    //    我的咨询列表
    @Headers({"version:1.0.0","apicode:EH1001"})
    @POST("app/consultant/userList")
    Observable<MyConsultationBean> getMyConsultaiton(@Header("token") String token,
                                                     @Query("userId") String userId,
                                                     @Query("page") int page,
                                                     @Query("limit") int limit,
                                                     @Query("creditID") String creditID
    );

    //    我的投诉列表
    @Headers({"version:1.0.0","apicode:EG1001"})
    @POST("app/complaint/userList")
    Observable<ComplainBean> getComplain(@Header("token") String token,
                                         @Query("userId") String userId,
                                         @Query("page") int page,
                                         @Query("limit") int limit,
                                         @Query("creditID")String creditID
    );
    //    办件记录数量接口
    @Headers({"version:1.0.0"})
    @POST("app/apply/userCount")
    Observable<BanjianCountNetBean> getUserBanjianCount(@Header("token") String token,
                                                        @Query("userId") String userId
    );
    /**
     * 用户修改头像
     */
    @POST
    Observable<UserPicBean> updateUserPic(@Url String url,
                                          @Body RequestBody Body);

    /**
     *------------------------------------------------下边是wcm----------------------------------------------------------------------------
     */
    //请求wcm地址 部分通用
    @GET
    Observable<WcmBean> getWcmData(@Url String url);
    //创建问题
    @GET
    Observable<CommonProblemBean> getCommonProblem(@Url String url);
    @GET
    Observable<String> getStringData(@Url String url);
    //请求wcm地址 部分通用
    @GET
    Observable<ImplementationSubjectBean> getHandleAffairsServiceData(@Url String url);

    //审批公示
    @POST("app/public/approveList")
    Observable<PublicityBean> getpublicity(/*@Header("token") String token,*/
                                           @Query("acceptStatus") String acceptStatus,
                                           @Query("method") String method,
                                           @Query("page") String page,
                                           @Query("limit") String limit
    );
    //办件查询
    @POST("app/apply/findApply")
    Observable<InquiriesBean> getInquiries(@Query("userId") String userId,
                                           @Query("applyNo") String applyNo
    );





//
//    //请求document数据通用方法
//    @GET
//    Observable<DocumentsBean> getDocuments(@Url String url);
//
//    //请求详情页通用方法
//    @GET
//    Observable<NewsDetailsBean> getDetails(@Url String url);
//
//    //--------个人中心接口------------
//    /**
//     * 获取用户收藏列表
//     */
//    @POST("currency/Currency/getNewsCollect")
//    Observable<CollectBean> getCollect(@Query("token") String token,
//                                       @Query("page") int searchtype);
//
//    /**
//     * 获取用户消息中心
//     */
//    @POST("push/push/tslis")
//    Observable<ResponseBody> getNewsCenter(@Query("page") int searchtype);
//    /**
//     * 即添加浏览记录 又判断是否收藏
//     */

//    @Headers({"apicode: AA1001", "version: 1.0.0", "token:", "key:"})
//    @POST("currency/Currency/getNewId")
//    Observable<IsItCollectionBean> getNewId(
//                                            @Query("token") String token,
//                                            @Query("nid") String nid,
//                                            @Query("url") String url,
//                                            @Query("videourl") String videourl,
//                                            @Query("type") String type,
//                                            @Query("title") String title);
//    /**
//     * 收藏
//     */
//    @POST("currency/Currency/addNewsCollect")
//    Observable<CollectBean> addNewsCollect(@Query("token") String nid,
//                                           @Query("nid") String url);
//    /**
//     * 取消收藏
//     */
//    @POST("currency/Currency/delNewsCollect")
//    Observable<CollectBean> delNewsCollect(@Query("token") String nid,
//                                           @Query("nid") String url);
//
//    /**
//     * 退出登录
//     */
//    @POST("phone/Phone/loginout")
//    Observable<LoginBean> logout(@Query("token") String token);
//
//
//
//    /**
//     * 验证手机验证码
//     */
//    @POST("verification/Verification/fPwdValiCoad")
//    Observable<RegistBean> identify(@Query("identify") String identify,
//                                    @Query("phone") String pnum
//    );
//
//    /**
//     * 验证电话号码是否重复
//     */
//    @POST("phone/Phone/ifRepetPhone")
//    Observable<RegistBean> ifRepetPhone(@Query("phone") String pnum);
//
//    /**
//     * 用户注册
//     */
//    @POST("phone/Phone/userPhoneRegister")
//    Observable<RegistBean> regist(@Query("type") int type,
//                                  @Query("passwd") String psd,
//                                  @Query("phone") String pnum
//    );
//
//    /**
//     * 发送手机验证码
//     */
//    @POST("verification/Verification/fPwdSendCoadone")
//    Observable<RegistBean> fPwdSendCoadone(@Query("phone") String pnum);
//
//    /**
//     * 获取用户信息
//     */
//    @POST("currency/Currency/getUsersDetails")
//    Observable<LoginBean> getUserInfo(@Query("token") String token);
//
//    /**
//     * 修改密码
//     */
//    @POST("currency/Currency/updatapassword")
//    Observable<LoginBean> updatePsd(@Query("token") String token,
//                                    @Query("oldpad") String oldpad,
//                                    @Query("newpad") String newpad,
//                                    @Query("qrnewpad") String qrnewpad);
//
//    /**
//     * 用户修改个人信息
//     */
//    @POST("currency/Currency/updateReader")
//    Observable<LoginBean> updateUserInfo(@Query("token") String token,
//                                         @Query("nickname") String oldpad,
//                                         @Query("birthday") String newpad);
//
//    /**
//     * 用户修改头像
//     */
//    @POST("currency/Currency/updatePortrait")
//    Observable<UserPicBean> updateUserPic(@Body RequestBody Body);
//
//    /**
//     * 用户反馈/爆料
//     */
//    @POST("currency/currency/saveFeedback")
//    Observable<LoginBean> feedback(@Body RequestBody Body);
//
//    /**
//     * 批量取消收藏
//     */
//    @POST("currency/Currency/delNewsCollects")
//    Observable<CollectBean> delCollects(@Query("token") String nid,
//                                        @Query("nids") String url);
//
//    /**
//     * 忘记密码验证手机
//     */
//    @POST("phone/Phone/checkphone")
//    Observable<RegistBean> checkphone(@Query("phone") String pnum);
//
//    /**
//     * 找回密码重置密码
//     */
//    @POST("phone/Phone/findPassword")
//    Observable<RegistBean> findPsd(@Query("phone") String pnum,
//                                   @Query("password") String newpad);
//
//    /**
//     * 版本更新
//     */
//    @POST("edition/edition/latestversion")
//    Observable<ResponseBody> update();

//    /**
//
}


